package io.renren.modules.workflow.service.impl;

import cn.hutool.core.util.ObjectUtil;
import io.renren.modules.sys.entity.SysUserEntity;
import io.renren.modules.workflow.dao.ActBusFormMetadataFieldMapper;
import io.renren.modules.workflow.entity.ActBusFormMetadataField;
import io.renren.modules.workflow.service.IActBusFormMetadataFieldService;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * 流程单元数据Service业务层处理
 *
 * @author caiap
 * @date 2021-07-22
 */
@Service
public class ActBusFormMetadataFieldServiceImpl implements IActBusFormMetadataFieldService {
    @Autowired
    private ActBusFormMetadataFieldMapper actBusFormMetadataFieldMapper;

    /**
     * 查询流程单元数据
     *
     * @param abfmfId 流程单元数据ID
     * @return 流程单元数据
     */
    @Override
    public ActBusFormMetadataField selectActBusFormMetadataFieldById(String abfmfId) {
        return actBusFormMetadataFieldMapper.selectActBusFormMetadataFieldById(abfmfId);
    }

    /**
     * 查询流程单元数据列表
     *
     * @param actBusFormMetadataField 流程单元数据
     * @return 流程单元数据
     */
    @Override
    public List<ActBusFormMetadataField> selectActBusFormMetadataFieldList(ActBusFormMetadataField actBusFormMetadataField) {
        return actBusFormMetadataFieldMapper.selectActBusFormMetadataFieldList(actBusFormMetadataField);
    }

    /**
     * 新增流程单元数据
     *
     * @param actBusFormMetadataField 流程单元数据
     * @return 结果
     */
    @Override
    public int insertActBusFormMetadataField(ActBusFormMetadataField actBusFormMetadataField) {
        actBusFormMetadataField.setAbfmfId(UUID.randomUUID().toString());
        actBusFormMetadataField.setCreateBy(((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername());
        actBusFormMetadataField.setCreateTime(new Date());
        return actBusFormMetadataFieldMapper.insertActBusFormMetadataField(actBusFormMetadataField);
    }

    /**
     * 修改流程单元数据
     * @param actBusFormMetadataField 流程单元数据
     * @return 结果
     */
    @Override
    public int updateActBusFormMetadataField(ActBusFormMetadataField actBusFormMetadataField) {
        actBusFormMetadataField.setUpdateBy(((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername());
        actBusFormMetadataField.setUpdateTime(new Date());
        return actBusFormMetadataFieldMapper.updateActBusFormMetadataField(actBusFormMetadataField);
    }

    /**
     * 批量删除流程单元数据
     *
     * @param abfmfIds 需要删除的流程单元数据ID
     * @return 结果
     */
    @Override
    public int deleteActBusFormMetadataFieldByIds(String[] abfmfIds) {
        return actBusFormMetadataFieldMapper.deleteActBusFormMetadataFieldByIds(abfmfIds);
    }

    /**
     * 删除流程单元数据信息
     *
     * @param abfmfId 流程单元数据ID
     * @return 结果
     */
    @Override
    public int deleteActBusFormMetadataFieldById(String abfmfId) {
        return actBusFormMetadataFieldMapper.deleteActBusFormMetadataFieldById(abfmfId);
    }

    /**
     * @Desc: 校验流程表单元数据字段属性唯一性
     * @auther: landlord
     * @date: 2021/7/17 10:43
     * @return:
     */
    @Override
    public String checkActBusFormMetadataFieldUnique(ActBusFormMetadataField actBusFormMetadataField){
        String abfmId = ObjectUtil.isNull(actBusFormMetadataField.getAbfmfId()) ? "-1" : actBusFormMetadataField.getAbfmfId();
        ActBusFormMetadataField info = actBusFormMetadataFieldMapper.checkActBusFormMetadataFieldColumnFieldUnique(actBusFormMetadataField.getColumnField());
        if (ObjectUtil.isNotNull(info) && !info.getAbfmfId().equals(abfmId)) {
            return "1";
        }
        return "0";
    }


}
